home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Hacks / Hacks ’97 / Warrior’s Progress / source code / Source / Libraries / Application / EventMaker.cp < prev    next >
Encoding:
Text File  |  1997-06-28  |  3.0 KB  |  112 lines  |  [TEXT/CWIE]

  1. // EventMaker.cp
  2.  
  3. #ifndef EventMaker_h
  4. #include "EventMaker.h"
  5. #endif
  6. #ifndef NullEvent_h
  7. #include "NullEvent.h"
  8. #endif
  9. #ifndef MouseUpEvent_h
  10. #include "MouseUpEvent.h"
  11. #endif
  12. #ifndef MouseDownEvent_h
  13. #include "MouseDownEvent.h"
  14. #endif
  15. #ifndef MouseMovedEvent_h
  16. #include "MouseMovedEvent.h"
  17. #endif
  18. #ifndef KeyUpEvent_h
  19. #include "KeyUpEvent.h"
  20. #endif
  21. #ifndef KeyDownEvent_h
  22. #include "KeyDownEvent.h"
  23. #endif
  24. #ifndef AutoKeyEvent_h
  25. #include "AutoKeyEvent.h"
  26. #endif
  27. #ifndef ResumeEvent_h
  28. #include "ResumeEvent.h"
  29. #endif
  30. #ifndef SuspendEvent_h
  31. #include "SuspendEvent.h"
  32. #endif
  33. #ifndef HighLevelEvent_h
  34. #include "HighLevelEvent.h"
  35. #endif
  36. #ifndef UpdateEvent_h
  37. #include "UpdateEvent.h"
  38. #endif
  39. #ifndef ActivateEvent_h
  40. #include "ActivateEvent.h"
  41. #endif
  42. #ifndef DeactivateEvent_h
  43. #include "DeactivateEvent.h"
  44. #endif
  45. #ifndef DiskInsertionEvent_h
  46. #include "DiskInsertionEvent.h"
  47. #endif
  48. #ifndef SingleAllocator_h
  49. #include "SingleAllocator.h"
  50. #endif
  51.  
  52. #define MaxSize2(A,B)                    ( (sizeof(A)>sizeof(B)) ? sizeof(A) : sizeof(B) )
  53. #define MaxSize4(A,B,C,D)                ( (MaxSize2(A,B)>MaxSize2(C,D) ? MaxSize2(A,B) : MaxSize2(C,D) ) )
  54. #define MaxSize8(A,B,C,D,E,F,G,H)    ( (MaxSize4(A,B,C,D)>MaxSize4(E,F,G,H) ? MaxSize4(A,B,C,D) : MaxSize4(E,F,G,H) ) )
  55. #define MaxSize16(A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,Q)    \
  56.     ( (MaxSize8(A,B,C,D,E,F,G,H)>MaxSize8(I,J,K,L,M,N,P,Q) ? MaxSize8(A,B,C,D,E,F,G,H) : MaxSize8(I,J,K,L,M,N,P,Q) ) )
  57.  
  58. #define maxEventSize        MaxSize16( NullEvent, MouseUpEvent, MouseDownEvent, MouseMovedEvent, \
  59.                                               KeyUpEvent, KeyDownEvent, AutoKeyEvent, ResumeEvent, \
  60.                                               SuspendEvent, HighLevelEvent, UpdateEvent, ActivateEvent, \
  61.                                               DeactivateEvent, DiskInsertionEvent, NullEvent, NullEvent )
  62.  
  63. Event& EventMaker::MakeEvent( const EventRecord& event )
  64.   {
  65.     static SingleAllocator< Event, maxEventSize > storage;
  66.     storage.DeleteAll();
  67.     
  68.     switch( event.what )
  69.       {
  70.         case nullEvent:    return *new(storage) NullEvent( event );
  71.         case mouseDown:    return *new(storage) MouseDownEvent( event );
  72.         case mouseUp:        return *new(storage) MouseUpEvent( event );
  73.         case keyDown:        return *new(storage) KeyDownEvent( event );
  74.         case keyUp:            return *new(storage) KeyUpEvent( event );
  75.         case autoKey:        return *new(storage) AutoKeyEvent( event );
  76.         case updateEvt:    return *new(storage) UpdateEvent( event );
  77.         case diskEvt:        return *new(storage) DiskInsertionEvent( event );
  78.  
  79.         case activateEvt:
  80.             if ( event.modifiers & activeFlag )
  81.                 return *new(storage) ActivateEvent( event );
  82.              else
  83.                 return *new(storage) DeactivateEvent( event );
  84.         
  85.         case kHighLevelEvent:
  86.             return *new(storage) HighLevelEvent( event );
  87.         
  88.         case osEvt:
  89.             switch ( Byte3( event.message ) )
  90.               {
  91.                 case suspendResumeMessage:
  92.                     if ( (event.message & resumeFlag) != 0 )
  93.                         return *new(storage) ResumeEvent( event );
  94.                      else
  95.                         return *new(storage) SuspendEvent( event );
  96.                         
  97.                 case mouseMovedMessage:
  98.                     return *new(storage) MouseMovedEvent( event );
  99.                 
  100.                 default:
  101.                     Assert( 0 );
  102.                     break;
  103.               }
  104.         
  105.         default:
  106.             Assert( 0 );
  107.             break;
  108.       }
  109.     
  110.     return *new(storage) NullEvent( event );
  111.   }
  112.